// ignore_for_file: avoid_print, use_key_in_widget_constructors, library_private_types_in_public_api, prefer_const_constructors, file_names, slash_for_doc_comments, dangling_library_doc_comments
/**
StatefulWidget的生命周期方法：
constructor（构造函数）: 当Flutter框架通过创建StatefulWidget的实例来开始构建widget时调用。

initState: 当State对象被创建时调用。这是插入widget树的时候，通常在这里进行一次性的初始化工作。比如，你可以在这里初始化数据、设置控制器、添加监听器等。

didChangeDependencies: 当State对象的依赖关系发生变化时调用，例如，之前在initState中无法访问的InheritedWidget现在可以使用了。它也可能在initState后立即被调用。

build: 是构建Widget的方法，Flutter框架频繁调用此方法，以响应外部数据变化并重新构建UI界面。

didUpdateWidget: 当widget的配置发生变化时调用，例如，父widget可能会改变当前widget的实例变量。它是在widget重新构建时调用，可以用来比较旧的widget和当前widget，并对状态进行相应的调整。

deactivate: 当State对象从树中被移除时调用，但可能会被重新插入到树中。

dispose: 当State对象从树中永久移除时调用，用于进行最终的清理工作，例如取消定时器、移除监听器、解除控制器等。

特殊情况的生命周期方法：
reassemble: 仅在开发期间用于热重载时调用，生产环境中不会被调用。
通过这些生命周期方法，你可以管理StatefulWidget的状态和行为，响应其生命周期事件。理解和合理利用这些生命周期方法，对于创建高效、可维护的Flutter应用来说至关重要。
 * 
 */

import 'package:flutter/material.dart';

class MyStatefulWidget extends StatefulWidget {
  @override
  _MyStatefulWidgetState createState() => _MyStatefulWidgetState();
}

class _MyStatefulWidgetState extends State<MyStatefulWidget> {
  @override
  void initState() {
    super.initState();
    // 初始化数据、设置监听器等
    print("initState called");
  }

  @override
  void didChangeDependencies() {
    super.didChangeDependencies();
    // 当依赖的InheritedWidget发生变化时，可以在这里更新数据
    print("didChangeDependencies called");
  }

  @override
  Widget build(BuildContext context) {
    // 返回一个Widget树
    print("build called");
    return Scaffold(
      appBar: AppBar(
        title: Text("Lifecycle Example"),
      ),
      body: Center(
        child: Text("Check the console for the lifecycle calls."),
      ),
    );
  }

  @override
  void didUpdateWidget(MyStatefulWidget oldWidget) {
    super.didUpdateWidget(oldWidget);
    // 比较oldWidget和当前widget的差异，并更新状态
    print("didUpdateWidget called");
  }

  @override
  void deactivate() {
    super.deactivate();
    // 在widget被移除前可能需要执行的操作
    print("deactivate called");
  }

  @override
  void dispose() {
    super.dispose();
    // 取消监听器、控制器等
    print("dispose called");
  }
}
